home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / tf_sourc / vesa.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1993-06-16  |  3.1 KB  |  139 lines

  1. UNIT VESA;   { by »The Faker« in 1993 }
  2.  
  3. INTERFACE
  4.  
  5. TYPE
  6.     String0=ARRAY[1..255] OF Char;
  7.     String0Ptr=^String0;
  8.     WordArray=ARRAY[0..255] OF Word;
  9.     VESABlockType=RECORD
  10.                         VESASignature:ARRAY[0..3] OF Char;
  11.                         VESAVersion:Word;
  12.                         OEMStringPtr:String0Ptr;
  13.                         Capabilities:ARRAY[0..3] OF Byte;
  14.                         VideoModePtr:^WordArray;
  15.                         Dummy:ARRAY[0..237] OF Byte;
  16.                   END;
  17.     VESAInfoType=RECORD
  18.                        ModeAttr:Word;
  19.                        WinAAttr:Byte;
  20.                        WinBAttr:Byte;
  21.                        WinGranularity:Word;
  22.                        WinSize:Word;
  23.                        WinASegment:Word;
  24.                        WinBSegment:Word;
  25.                        WinFuncPtr:Pointer;
  26.                        BytesPerScanLine:Word;
  27.                        XRes:Word;
  28.                        YRes:Word;
  29.                        XCharSize:Byte;
  30.                        YCharSize:Byte;
  31.                        NumberOfPlanes:Byte;
  32.                        BitsPerPixel:Byte;
  33.                        NumberOfBanks:Byte;
  34.                        MemoryModel:Byte;
  35.                        BankSize:Byte;
  36.                        Dummy:ARRAY[0..226] OF Byte;
  37.                  END;
  38. VAR
  39.    VESABlock:^VESABlockType;
  40.  
  41. FUNCTION VESAInstalled:Boolean;
  42.  
  43. FUNCTION VESAVersion:Word;
  44.  
  45. FUNCTION OEMString:String;
  46.  
  47. FUNCTION VESAModeExist(ModeNr:Word):Boolean;
  48.  
  49. PROCEDURE VESAGetModeInfo(ModeNr:Word; VAR VESAInfo:VESAInfoType);
  50.  
  51. PROCEDURE VESASetBank(BankNr:Word);
  52.  
  53. PROCEDURE VESASetMode(ModeNr:Word);
  54.  
  55. IMPLEMENTATION
  56.  
  57. FUNCTION VESAInstalled:Boolean;
  58. VAR
  59.    Status:Word;
  60. BEGIN
  61.      GetMem(VESABlock,256);
  62.      ASM
  63.         mov di,word ptr vesablock
  64.         mov es,word ptr vesablock+2
  65.         mov ax,$4f00
  66.         int $10
  67.         mov status,ax
  68.      END;
  69.      VESAInstalled:=Status=$4F;
  70. END;
  71.  
  72. FUNCTION VESAVersion:Word;
  73. BEGIN
  74.      VESAVersion:=VESABlock^.VESAVersion;
  75. END;
  76.  
  77. FUNCTION OEMString:String;
  78. VAR
  79.    I:Word;
  80.    S:String;
  81. BEGIN
  82.      I:=0;
  83.      REPEAT
  84.            Inc(I);
  85.            S[I]:=VESABlock^.OEMStringPtr^[I];
  86.      UNTIL (S[I]=#0) OR (I=255);
  87.      S[0]:=Chr(I-1);
  88.      OEMString:=S;
  89. END;
  90.  
  91. FUNCTION VESAModeExist(ModeNr:Word):Boolean;
  92. VAR
  93.    I:Byte;
  94. BEGIN
  95.      VESAModeExist:=TRUE;
  96.      I:=0;
  97.      WITH VESABlock^ DO
  98.      BEGIN
  99.           WHILE VideoModePtr^[I]<>$FFFF DO
  100.           BEGIN
  101.                IF VideoModePtr^[I]=ModeNr THEN
  102.                   Exit;
  103.                Inc(I);
  104.           END;
  105.      END;
  106.      VESAModeExist:=FALSE;
  107. END;
  108.  
  109. PROCEDURE VESAGetModeInfo(ModeNr:Word; VAR VESAInfo:VESAInfoType);
  110. BEGIN
  111.      ASM
  112.         les di,vesainfo
  113.         mov cx,modenr
  114.         mov ax,$4f01
  115.         int $10
  116.     END;
  117. END;
  118.  
  119. PROCEDURE VESASetBank(BankNr:Word);
  120. BEGIN
  121.      ASM
  122.         mov ax,$4f05
  123.         xor bx,bx
  124.         mov dx,banknr
  125.         int $10
  126.      END;
  127. END;
  128.  
  129. PROCEDURE VESASetMode(ModeNr:Word);
  130. BEGIN
  131.      ASM
  132.         mov ax,$4f02
  133.         mov bx,modenr
  134.         int $10
  135.      END;
  136. END;
  137.  
  138. END.
  139.